package gui.factory;

import core.connector.Connector;
import gui.factory.components.AbstractDownload;
import gui.factory.components.AbstractDownloadList;
import gui.factory.components.AbstractListFiles;
import gui.factory.components.AbstractMessageDisplayer;

public interface AbstractGUIFactory
{
    /**
     *
     * This enumeration is used to show the types of GUI that were implemented
     */
    public enum GUIType
    {
        SWING
    }
    //FILE MENU
    void showLogin();
    void showEncryptPassword();
    void showUploadFile();
    //TOOLS MENU
    void showSplitFile();
    void showMergeFiles();
    void showCompareFiles();
    void showLoginGenerate();
    void showVisualConfirmation(javax.swing.ImageIcon image,String qst,StringBuffer captcha);
    void showRenameFiles();
    //FAVORITES MENU
    //CONFIGURE MENU
    void showOption();
    //HELP MENU
    void showAbout();
    void showHowToHelp();
    void showHelp();

    AbstractMessageDisplayer getMessageDisplayer();

    //INTERNAL COMPONENTS
    AbstractDownload createDownloadGUI();
    AbstractDownloadList getDownloadList();
    AbstractListFiles createListFiles(Connector connector);
    /**
     * Updates:
     *  -SystemTray (if it is supported)
     *  -Theme
     */
    void updateDisplay();
    void minimize();
    void showMainGUI();
}
